﻿using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace SDCloudSolution.SDCloud.Entities.Models
{

    /// <summary>
    /// Represents a model statistics information.
    /// </summary>
    public class ModelMetadataEntity
    {
        #region Field names
        public static class Fields
        {
            public const string MODEL_ID = "ModelId";
            public const string VENDOR_NAME = "Vendor";
            public const string MODEL_NAME = "Name";
            public const string CONFIGURABLE_STOCKS = "ConfigurableStocks";
            public const string CONFIGURABLE_FLOWS = "ConfigurableFlows";
            public const string CONFIGURABLE_AUXES = "ConfigurableAuxes";
        }
        #endregion

        /// <summary>
        /// The model identifier
        /// </summary>
        [Column(Fields.MODEL_ID)]
        public int ModelId { get; set; }

        /// <summary>
        /// Name of the model vendor
        /// </summary>
        [Column(Fields.VENDOR_NAME)]
        public string Vendor { get; set; }

        /// <summary>
        /// Model name recieved from model file
        /// </summary>
        [Column(Fields.MODEL_NAME)]
        public string Name { get; set; }

        /// <summary>
        /// List of stocks wich are represented with constants in model definition
        /// </summary>
        [Column(Fields.CONFIGURABLE_STOCKS)]
        public Dictionary<string, object> ConfigurableStocks { get; set; }

        /// <summary>
        /// List of flows wich are represented with constants in model definition
        /// </summary>
        [Column(Fields.CONFIGURABLE_FLOWS)]
        public Dictionary<string, object> ConfigurableFlows { get; set; }

        /// <summary>
        /// List of auxes wich are represented with constants in model definition
        /// </summary>
        [Column(Fields.CONFIGURABLE_AUXES)]
        public Dictionary<string, object> ConfigurableAuxes { get; set; }

    }
}
